﻿using Onshi.POS.AccesoDatos.Interfaces;
using Onshi.POS.Modelo.Entidades;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Text;

namespace Onshi.POS.Repositorios
{
    public abstract class RepositorioBase<TEntidad, TIdentidad, TServicioDatos>
        where TEntidad : EntidadBase<TIdentidad>
    {
        #region Constructores

        public RepositorioBase()
            : base()
        {
            servicioDatos = (TServicioDatos)InstanciarServicioDatos();
        }

        internal TServicioDatos servicioDatos;

        #endregion

        #region Metodos

        internal Object InstanciarServicioDatos()
        {
            var aaa = typeof(TServicioDatos).Name.Substring(1);
            var ensabladoAccesoDatos = "Onshi.POS.AccesoDatos";
            var objecto = AppDomain.CurrentDomain.CreateInstance(ensabladoAccesoDatos, String.Concat(ensabladoAccesoDatos, ".", aaa)).Unwrap();
            return objecto;
        }

        protected abstract TEntidad FilaAEntidad(DataRow fila);

        public List<TEntidad> TablaALista(DataTable tabla)
        {
            var lista = new List<TEntidad>();
            foreach (DataRow fila in tabla.Rows)
                lista.Add(FilaAEntidad(fila));
            return lista;
        }

        #endregion
    }
}
